package Day9.内部类.成员内部类;

/**
 * @Author kalista
 * @Description 静态内部类
 * @Date 2020/11/13  15:28
 **/
public class Outer1 {

    private int outerVariable = 1;

    /**
     * 外部类定义的属性(重名)
     */
    private int commonVariable = 2;

    private static int outerStaticVariable = 3;

    static {
        System.out.println("Outer的静态块被执行了……");
    }
    /**
     * 成员方法
     */
    public void outerMothod() {
        System.out.println("我是外部类的outerMethod方法");
    }

    /*
     *	静态方法
     */
    public static void outerStaticMethod() {
        System.out.println("我是外部类的outerStaticMethod静态方法");
    }


    /*8
    静态内部类
     */
    public static class Inner1{

        /**
         * 成员信息
         */
        private int innerVariable = 10;
        private int commonVariable = 20;
        private static int innerStaticVariable = 30;

        static {
            System.out.println("Outer.Inner的静态块执行了……");
        }

        /**
         * 成员方法
         */
        public void innerShow() {
            System.out.println("innerVariable:" + innerVariable);
            System.out.println("内部的commonVariable:" + commonVariable);
            System.out.println("outerStaticVariable:"+outerStaticVariable);
            outerStaticMethod();
        }

        /**
         * 静态方法
         * 如果一个方法时静态的则 里面的变量必须都是静态的如果不是就报错
         */
        public static void innerStaticShow() {
            //被调用时会先加载Outer类
            outerStaticMethod();
            System.out.println("outerStaticVariable" + outerStaticVariable);
        }


    }


    public static void main(String[] args) {
        //访问静态的内部类的静态方法. inner类被加载 .此时外部类未加载. 独立存在 不依赖于外部类
        Outer1.Inner1.innerStaticShow();

        // 访问静态内部类里面的成员方法
        Inner1 inner1 = new Outer1.Inner1();
        inner1.innerShow();
    }



}
